#!/bin/python3
import re
class Dict():
    def __init__(self):
        self.d = {}
    def add(self, h, b):
        '''
        >>> d = Dict(); d.add('head', 'body'); d.d
        {'head': 'body'}
        '''
        if not re.fullmatch('【[^【】]+】[^【】]+', f'【{h}】{b}'): raise BaseException('写了“【”或“】”')
        if h in self.d: raise BaseException('已有【{h}】')
        self.d[h] = b
    def query(self, q):
        '''
        >>> d = Dict(); d.add('head', 'body'); *d.query('h'),
        (('head', 'body'),)
        '''
        for h, b in self.d.items():
            if q in f'【{h}】{b}': yield h, b
    def read(self, d):
        '''
        >>> d = Dict(); d.read('【head】body'); d.d
        {'head': 'body'}
        '''
        for m in re.finditer('【([^【】]+)】([^【】]+)', d):
            if m[1] in self.d: raise BaseException(f'多个【{m[1]}】')
            self.d[m[1]] = m[2]
    def update(self, h, b):
        '''
        >>> d = Dict(); d.add('head', 'body'); d.update('head', 'newbody'); d.d; d.update('head', ''); d.d
        {'head': 'newbody'}
        {}
        '''
        if not re.fullmatch('【[^【】]+】[^【】]*', f'【{h}】{b}'): raise BaseException('写了“【”或“】”')
        if h not in self.d: raise BaseException(f'无【{h}】')
        if b: self.d[h] = b
        else: del self.d[h]
    def write(self):
        '''
        >>> d = Dict(); d.add('head', 'body'); d.write()
        '【head】body'
        '''
        return ''.join(f'【{h}】{self.d[h]}' for h in sorted(self.d.keys()))
if '__main__' == __name__:
    import argparse
    a = argparse.ArgumentParser()
    a.add_argument('-a', nargs=2)
    a.add_argument('-i')
    a.add_argument('-o')
    a.add_argument('-q')
    a.add_argument('-u', nargs=2)
    a = a.parse_args()
    d = Dict()
    if a.i:
        with open(a.i) as f: d.read(f.read())
    if a.q:
        for h, b in d.query(a.q): print(f'【{h}】{b}')
    if a.u: d.update(*a.u)
    if a.a: d.add(*a.a)
    if a.o:
        with open(a.o, 'w') as f: f.write(d.write())
